package com.example.forecast.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.example.forecast.R;
import com.example.forecast.bean.DetailsBean;
import com.example.forecast.bean.Lunar;
import com.example.forecast.bean.Solar;
import com.example.forecast.data.LiuRenTrigram;
import com.example.forecast.util.LiuRenUtil;
import com.example.forecast.util.LunarSolarConverter;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MicroLiuRenActivity extends AppCompatActivity {

    private TextView result, time, trigramWord, annotation, details;
    private Button start;
    private LiuRenUtil liuRenUtil;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_micro_liu_ren);

        result = findViewById(R.id.tv_ren_result);
        time = findViewById(R.id.tv_ren_time);
        trigramWord = findViewById(R.id.tv_ren_trigramWord);
        annotation = findViewById(R.id.tv_ren_annotation);
        details = findViewById(R.id.tv_ren_details);
        start = findViewById(R.id.btn_ren_start);

        details.setVisibility(View.GONE);

        Date date = new Date();
        Solar solar = new Solar();//阳历对象
        solar.solarYear = Integer.valueOf(new SimpleDateFormat("yyyy").format(date));//获取阳历年份
        solar.solarMonth = Integer.valueOf(new SimpleDateFormat("MM").format(date));//获取阳历月份
        solar.solarDay = Integer.valueOf(new SimpleDateFormat("dd").format(date));//获取阳历日期

        Lunar lunar = LunarSolarConverter.SolarToLunar(solar);//转换为阴历对象

        int hour = Integer.valueOf(new SimpleDateFormat("HH").format(date));//当前小时数
//        int month = Integer.valueOf(new SimpleDateFormat("mm").format(date));
        int rotateSum;
        if (hour != 23) {//判断是否是子时
            rotateSum = lunar.lunarMonth + lunar.lunarDay + lunarHourNum(hour) - 1;//宫位轮转总数,减一是因为月上起日。日上起时返回的下标已减一
            Log.d("test", lunar.lunarMonth + " "  + lunar.lunarDay + " " + lunarHourNum(hour) + " ");
        } else {//是子时则日柱后推一天
            rotateSum = lunar.lunarMonth+ lunar.lunarDay + lunarHourNum(hour);//宫位轮转总数,子时后退加一抵消月上起日。日上起时返回的下标已减一
        }

        int trigramNum = rotateSum % 6;//宫位
        if (trigramNum == 0) {//空亡
            trigramNum = 5;//转宫位数组下标
        } else {
            trigramNum--;//转宫位数组下标
        }

        liuRenUtil = new LiuRenUtil(solar, lunar, date);

        String year = LunarSolarConverter.lunarYearToGanZhi(lunar.lunarYear);//农历年
//        String yearGan = year.substring(0, 1);//截取年干
//
//        String lunarDayName = lunarDay(solar.solarYear, dayNum(solar.solarYear, solar.solarMonth, solar.solarDay));

        DetailsBean bean = new DetailsBean();
        bean.setResult(LiuRenTrigram.trigramName[trigramNum]);
//        bean.setTime(year + " " + monthPillar(yearGan, lunar.lunarMonth) +
//                "(" + lunarDate(lunar.lunarMonth, 0) + ")月 " +
//                lunarDayName + "(" + lunarDate(lunar.lunarDay, 1) + ") " +
//                lunarHour(lunarDayName.substring(0, 1), hour, month));
        bean.setTrigramWord(LiuRenTrigram.trigramWord[trigramNum]);
        bean.setAnnotation(LiuRenTrigram.trigramExplain[trigramNum]);
        bean.setParticulars(LiuRenTrigram.trigramDetail[trigramNum]);
        bean.setPalaceSite(trigramNum);

        bean.setTime(liuRenUtil.getCharacter(0));

        details.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("TAGS", "onClick: " + bean.getResult());
                Intent intent = new Intent(MicroLiuRenActivity.this, LiuRenDetailsActivity.class);
                Bundle bundle = new Bundle();
                bundle.putSerializable("data", bean);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });

        int temp = trigramNum;
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                result.setText(bean.getResult());
                time.setText(bean.getTime());
                trigramWord.setText(bean.getTrigramWord());
                annotation.setText(bean.getAnnotation());
                details.setVisibility(View.VISIBLE);
                result.setTextColor(Color.parseColor(LiuRenTrigram.liuShenColor[temp]));
            }
        });


    }

    /**
     * @author: 日月同珲
     * @time: 2021/11/10 16:45
     * @param: int hour(小时)
     * @effect: 获取时辰
     * @return: int hourName(时辰数组下标)
     */
    private int lunarHourNum(int hour) {
        int hourName;

        if (hour == 23 || hour == 0) {//子时
            hourName = 0;
        } else {
            if (hour < 11) {//丑时至巳时
                if (hour < 5) {//丑时至寅时
                    if (hour < 3 && hour > 0) {//丑时
                        hourName = 1;
                    } else {//寅时
                        hourName = 2;
                    }
                } else {//卯时至巳时
                    if (hour < 7) {//卯时
                        hourName = 3;
                    } else if (hour > 8) {//巳时
                        hourName = 5;
                    } else {//辰时
                        hourName = 4;
                    }
                }
            } else {//午时至亥时
                if (hour < 17) {//午时至申时
                    if (hour < 13) {//午时
                        hourName = 6;
                    } else if (hour > 14) {//申时
                        hourName = 8;
                    } else {//未时
                        hourName = 7;
                    }
                } else {//酉时至亥时
                    if (hour < 19) {//酉时
                        hourName = 9;
                    } else if (hour > 20) {//亥时
                        hourName = 11;
                    } else {//戌时
                        hourName = 10;
                    }
                }
            }
        }
        return hourName;
    }

//    /**
//     * @author: 日月同珲
//     * @time: 2021/11/11 10:48
//     * @param: String gan(年干),int lunarMonth(农历月)
//     * @effect: 获取月柱名
//     * @return: pillarName(月柱名)
//     */
//    private String monthPillar(String gan, int lunarMonth) {
//
//        String pillarName = "";//月柱名
//
//        int january[] = new int[]{0, 2};//正月干支
//
//        if (gan.equals("甲") || gan.equals("己")) {
//            january[0] = 2;
//        } else if (gan.equals("乙") || gan.equals("庚")) {
//            january[0] = 4;
//        } else if (gan.equals("丙") || gan.equals("辛")) {
//            january[0] = 6;
//        } else if (gan.equals("戊") || gan.equals("癸")) {
//            january[0] = 0;
//        } else {
//            january[0] = 8;
//        }
//
//        int ganIndex = lunarMonth % 10 + january[0];//天干数
//        if (ganIndex > 10) {
//            ganIndex -= 10;
//        }
//        ganIndex--;//转天干数组下标
//
//        int zhiIndex = (lunarMonth + 1) % 12;//地支数组下标
//
//        pillarName = LiuRenTrigram.tianGan[ganIndex] + LiuRenTrigram.diZhi[zhiIndex].substring(0, 1);
//
//        return pillarName;
//    }
//
//    /**
//     * @author: 日月同珲
//     * @time: 2021/11/17 22:23
//     * @param: int solarYear(阳历年), int dayNum(阳历天数)
//     * @effect: 获取日柱名
//     * @return: lunarDayName(日柱名)
//     */
//    private String lunarDay(int solarYear, int dayNum) {
//        String lunarDayName = "";
//
//        int temp = ((solarYear - 1900) * 5 + (solarYear - 1900 + 3) / 4 + 9 + dayNum) % 60;
//
//        temp--;
//
//        lunarDayName = LiuRenTrigram.tianGan[temp % 10] + LiuRenTrigram.diZhi[temp % 12].substring(0, 1) + "日";
//
//        return lunarDayName;
//    }
//
//    /**
//     * @author: 日月同珲
//     * @time: 2021/11/17 10:57
//     * @param: String dayGan(日干) , int hour(阳历小时数) , int minute(阳历分钟数)
//     * @effect: 获取时柱名
//     * @return: lunarHourName(时柱名)
//     */
//    private String lunarHour(String dayGan, int hour, int minute) {
//        int lunarHourName = 0;
//
//        if (dayGan.equals("甲") || dayGan.equals("己")) {
//            lunarHourName = 0;
//        } else if (dayGan.equals("乙") || dayGan.equals("庚")) {
//            lunarHourName = 2;
//        } else if (dayGan.equals("丙") || dayGan.equals("辛")) {
//            lunarHourName = 4;
//        } else if (dayGan.equals("丁") || dayGan.equals("壬")) {
//            lunarHourName = 6;
//        } else if (dayGan.equals("戊") || dayGan.equals("癸")) {
//            lunarHourName = 8;
//        }
//
//        int temp = minute / 15;
//        String quarter = "";
//        if (hour % 2 == 1) {
//            switch (temp) {
//                case 0:
//                    quarter = "壹刻";
//                    break;
//                case 1:
//                    quarter = "两刻";
//                    break;
//                case 2:
//                    quarter = "叁刻";
//                    break;
//                case 3:
//                    quarter = "肆刻";
//                    break;
//            }
//        } else {
//            switch (temp) {
//                case 0:
//                    quarter = "伍刻";
//                    break;
//                case 1:
//                    quarter = "陆刻";
//                    break;
//                case 2:
//                    quarter = "柒刻";
//                    break;
//                case 3:
//                    quarter = "捌刻";
//                    break;
//            }
//        }
//
//        return LiuRenTrigram.tianGan[(lunarHourName + lunarHourNum(hour)) % 10] + LiuRenTrigram.lunarHourName[lunarHourNum(hour)] + " " + quarter;
//    }
//
//    /**
//     * @author: 日月同珲
//     * @time: 2021/11/11 10:53
//     * @param: int time(农历月份或日期),int state(状态值)
//     * @effect: 转换月份与日期
//     * @return: String date(转换后的农历时间)
//     */
//    private String lunarDate(int time, int state) {//state:0为月，1为日
//        String date = "";
//
//        if (state == 0) {
//
//            if (time > 9) {
//                date = "拾" + numTransition(time % 10);
//            } else {
//                date = numTransition(time);
//            }
//
//        } else if (state == 1) {
//            if (time < 11) {
//                if (time == 10) {
//                    date = "初拾";
//                }
//                date = "初" + numTransition(time);
//            } else if (time < 20) {
//                date = "拾" + lunarDate(time % 10, 1).substring(1);
//            } else if (time == 20 || time == 30) {
//                date = time > 20 ? "叁拾" : "贰拾";
//            } else {
//                date = "廿" + lunarDate(time % 10, 1).substring(1);
//            }
//        }
//
//        return date;
//    }
//
//    /**
//     * @author: 日月同珲
//     * @time: 2021/11/11 10:51
//     * @param: int singular
//     * @effect: 将数字转换为中文数字
//     * @return: String num(中文数字)
//     */
//    private String numTransition(int singular) {
//        String num = "";
//
//        switch (singular) {
//            case 0:
//                break;
//            case 1:
//                num = "壹";
//                break;
//            case 2:
//                num = "贰";
//                break;
//            case 3:
//                num = "叁";
//                break;
//            case 4:
//                num = "肆";
//                break;
//            case 5:
//                num = "伍";
//                break;
//            case 6:
//                num = "陆";
//                break;
//            case 7:
//                num = "柒";
//                break;
//            case 8:
//                num = "捌";
//                break;
//            case 9:
//                num = "玖";
//                break;
//        }
//
//        return num;
//    }
//
//    /**
//     * @author: 日月同珲
//     * @time: 2021/11/17 21:38
//     * @param: int solarMonth(阳历月数) , int solarDay(阳历天数)
//     * @effect: 获取天数
//     * @return: num(这一年的第几天)
//     */
//    private int dayNum(int solarYear, int solarMonth, int solarDay) {
//        int num = 0;
//
//        if (solarMonth < 6) {
//            switch (solarMonth) {
//                case 1:
//                    num = 0;
//                    break;
//                case 2:
//                    num = 31;
//                    break;
//                case 3:
//                    num = 59;
//                    break;
//                case 4:
//                    num = 90;
//                    break;
//                case 5:
//                    num = 120;
//                    break;
//                case 6:
//                    num = 151;
//                    break;
//            }
//        } else {
//            switch (solarMonth) {
//                case 7:
//                    num = 181;
//                    break;
//                case 8:
//                    num = 212;
//                    break;
//                case 9:
//                    num = 243;
//                    break;
//                case 10:
//                    num = 273;
//                    break;
//                case 11:
//                    num = 304;
//                    break;
//                case 12:
//                    num = 334;
//                    break;
//            }
//        }
//        num += solarDay;
//
//        if (solarYear % 400 == 0 || (solarYear / 4 == 0 && solarYear % 100 != 0) && solarMonth > 2) {
//            num++;
//        }
//
//        return num;
//    }
//
}